home *** CD-ROM | disk | FTP | other *** search
- { slides.pas -- Slide show of .BMP files }
-
- {$DEFINE FullSize} { Remove this line to scale images }
-
- program Slides;
-
- uses WinTypes, WinProcs, WObjects, Strings, UBitmap;
-
- const
-
- timer_ID = 1; { Local timer id number }
- (* numSlides = 7; { Windows 3.0 } *)
- numSlides = 3; { Windows 3.1 }
- secsToPause = 8; { Seconds to pause between slides }
-
- {- Array of slide file names. Must contain at least one entry. }
-
- slideNames: array[0 .. numSlides - 1] of PChar = (
-
- { Windows 3.1 }
- 'c:\tpw\owldemos\blaise.bmp',
- 'c:\tpw\owldemos\nolimits.bmp',
- 'c:\tpw\owldemos\racecar.bmp'
-
- { Windows 3.0 }
- (*
- 'c:\windows\chess.bmp',
- 'c:\windows\party.bmp',
- 'c:\windows\paper.bmp',
- 'c:\windows\ribbons.bmp'
- *)
-
- );
-
- type
-
- SlidesApplication = object(TApplication)
- procedure InitMainWindow; virtual;
- end;
-
- PSlidesWindow = ^SlidesWindow;
- SlidesWindow = object(TWindow)
- SlideBitmap: HBitmap; { Handle to bitmap in memory }
- Width, Height: LongInt; { Size of bitmap image }
- ImageIndex: Integer; { Current slideNames file name }
- constructor Init(AParent: PWindowsObject; ATitle: PChar);
- destructor Done;
- virtual;
- procedure DeleteOldObjects;
- procedure SetupWindow;
- virtual;
- procedure WMDestroy(var Msg: TMessage);
- virtual wm_First + wm_Destroy;
- procedure WMTimer(var Msg: TMessage);
- virtual wm_First + wm_Timer;
- procedure WMLButtonDown(var Msg: TMessage);
- virtual wm_First + wm_LButtonDown;
- procedure WMKeyDown(var Msg: TMessage);
- virtual wm_First + wm_KeyDown;
- procedure Paint(PaintDC: HDC; var PaintInfo: TPaintStruct);
- virtual;
- procedure LoadImage(FileName: PChar);
- end;
-
-
- { SlidesApplication }
-
- {- Initialize SlidesApplication object's window }
- procedure SlidesApplication.InitMainWindow;
- begin
- MainWindow := New(PSlidesWindow, Init(nil, 'Slide Show'))
- end;
-
-
- { SlidesWindow }
-
- {- Construct SlidesWindow and prepare full-screen window. }
- constructor SlidesWindow.Init(AParent: PWindowsObject;
- ATitle: PChar);
- begin
- TWindow.Init(AParent, ATitle);
- SlideBitmap := 0;
- with Attr do
- begin
- X := 0;
- Y := 0;
- W := GetSystemMetrics(sm_CXScreen);
- H := GetSystemMetrics(sm_CYScreen);
- Style := ws_PopUp or ws_Maximize
- end;
- LoadImage(slideNames[0]); { Load initial image }
- ShowCursor(false); { Hide cursor }
- ImageIndex := 0
- end;
-
- {- Dispose of any bitmap image in memory }
- destructor SlidesWindow.Done;
- begin
- DeleteOldObjects;
- ShowCursor(true);
- TWindow.Done
- end;
-
- {- Dispose of any SlidesWindow structures }
- procedure SlidesWindow.DeleteOldObjects;
- begin
- if SlideBitmap <> 0 then DeleteObject(SlideBitmap);
- SlideBitmap := 0 { Prevent deleting twice }
- end;
-
- {- Engage a timer for pausing between slides }
- procedure SlidesWindow.SetupWindow;
- begin
- TWindow.SetupWindow;
- SetTimer(HWindow, timer_ID, 1000 * secsToPause, nil)
- end;
-
- {- Intercept wm_Destroy message }
- procedure SlidesWindow.WMDestroy(var Msg: TMessage);
- begin
- KillTimer(hWindow, timer_ID);
- TWindow.WMDestroy(Msg)
- end;
-
- {- Timer has gone off: switch to next slide }
- procedure SlidesWindow.WMTimer(var Msg: TMessage);
- begin
- if numSlides > 1 then { No sense changing only one slide! }
- begin
- Inc(ImageIndex);
- if ImageIndex >= numSlides then ImageIndex := 0;
- LoadImage(slideNames[ImageIndex])
- end
- end;
-
- {- Exit program on clicking left mouse button }
- procedure SlidesWindow.WMLButtonDown(var Msg: TMessage);
- begin
- CloseWindow
- end;
-
- {- Exit program on any key press }
- procedure SlidesWindow.WMKeyDown(var Msg: TMessage);
- begin
- CloseWindow
- end;
-
- {- Load bitmap image from disk into memory }
- procedure SlidesWindow.LoadImage(FileName: PChar);
- var
- BitMapH: HBitMap;
- begin
- DeleteOldObjects; { Delete old bitmap if any }
- BitMapH := LoadBitmap(FileName, HWindow, Width, Height);
- if BitMapH = 0 then
- begin
- ShowCursor(true);
- MessageBox(HWindow, FileName, 'Error Loading File',
- mb_IconExclamation or mb_Ok);
- ShowCursor(false);
- CloseWindow { Exit on any file error }
- end else
- begin
- SlideBitmap := BitMapH;
- InvalidateRect(HWindow, nil, true) { Force repaint }
- end
- end;
-
- {- Paint or repaint the window, showing current slide }
- procedure SlidesWindow.Paint(PaintDC: HDC;
- var PaintInfo: TPaintStruct);
- var
- MemDC: HDC;
- R: TRect;
- begin
- MemDC := CreateCompatibleDC(PaintDC);
- SelectObject(MemDC, SlideBitmap);
- {$IFDEF FullSize}
- BitBlt(PaintDC, 0, 0, Width, Height, MemDC, 0, 0, SRCCopy);
- {$ELSE}
- GetClientRect(HWindow, R);
- StretchBlt(PaintDC, 0, 0, R.Right, R.Bottom,
- MemDC, 0, 0, Width, Height, SRCCopy);
- {$ENDIF}
- DeleteDC(MemDC)
- end;
-
- var
-
- SlidesApp: SlidesApplication;
-
- begin
- SlidesApp.Init('SlidesApp');
- SlidesApp.Run;
- SlidesApp.Done
- end.
-
-
- {--------------------------------------------------------------
- Copyright (c) 1991 by Tom Swan. All rights reserved.
- Revision 1.00 Date: 2/25/1991
- ---------------------------------------------------------------}
-